package com.hnqc.wxx;

import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.*;
import java.net.Socket;

public class Client {
    private DefaultListModel dt;
    private JTextArea jta;
    private JTextField jtf_message=new JTextField();
    private JTextField jtf_port=new JTextField("4567");
    private JTextField jtf_max=new JTextField("30");
    private JButton jbt1_start=new JButton("连接");
    private JButton jbt2_stop=new JButton("停止");
    private JButton jbt3_send=new JButton("发送");
    Socket socket;
    public void createUI() {
        JFrame jf = new JFrame("客服端");
        jf.setBounds(200, 200, 500, 300);
        //1、北边JPanel
        JPanel northPane = new JPanel();
        northPane.setLayout(new GridLayout(1, 6));
        northPane.add(new JLabel("人数上限"));
        northPane.add(jtf_max);
        northPane.add(new JLabel("端口"));
        northPane.add(jtf_port);
        northPane.add(jbt1_start);

        jbt2_stop.setEnabled(false);
        northPane.add(jbt2_stop);
        northPane.setBorder(new TitledBorder("配置信息"));
        //2、中间JPanel（分左右两栏）
        //左栏
        dt=new DefaultListModel();
        final JList jl=new JList();
        JScrollPane leftpane=new JScrollPane(jl);
        leftpane.setBorder(new TitledBorder("在线用户"));
        //右栏
        jta=new JTextArea();
        jta.setEditable(false);
        JScrollPane rightpane =new JScrollPane(jta);
        rightpane.setBorder(new TitledBorder("消息显示区"));
        JSplitPane centerPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftpane,rightpane);
        //设置分隔条的大小
        centerPane.setDividerSize(20);
        //设置分隔条的位置
        centerPane.setDividerLocation(100);
        //3、南部JPanel
        JPanel southPanel=new JPanel(new BorderLayout());
        southPanel.setBorder(new TitledBorder("写消息"));
        southPanel.add(jtf_message,BorderLayout.CENTER);

        jf.setLayout(new BorderLayout());
        jf.add(northPane,BorderLayout.NORTH);
        jf.add(centerPane,BorderLayout.CENTER);
        jf.add(southPanel,BorderLayout.SOUTH);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        serverEvent();

    }
    public void serverEvent() {

        jtf_message.addKeyListener(new KeyAdapter() {//文本敲击事件
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyChar()==KeyEvent.VK_ENTER){//是否点击了回车事件

                    try {
                        OutputStream out=socket.getOutputStream();//打开通道
                        PrintWriter pw=new PrintWriter(out,true);
                        pw.println(jtf_message.getText());//输出到客户端
                        jta.append("客户端说：" +jtf_message.getText() +"\n");//添加到Jta文本区域
                        // jtf_message.setText("");

                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

                }
            }
        });
        jbt1_start.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed (ActionEvent e){
                try {
                    socket = new Socket("127.0.0.1", 9999);//连接服务器
//                    InputStream in = socket.getInputStream();
//                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
//                    String str = bufferedReader.readLine();
//                    jta.append("服务器说：" + str);
//                    bufferedReader.close();
//                    in.close();
                    //循环读   放入线程
                    //new ClientReaderThread(socket).start();
                    ClientReaderThread clientReaderThread = new ClientReaderThread(socket);
                    new Thread(clientReaderThread).start();

                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }

        });
    }
    class ClientReaderThread implements Runnable{
        private Socket socket;//空指针   赋值
        public ClientReaderThread(Socket socket){
            this.socket=socket;

        }
        @Override
        public void run() {
            try {
                InputStream in = socket.getInputStream();//打开通道
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                while (true){//死循环
                    String str=bufferedReader.readLine();
                    jta.append("服务器说："+str+"\n");//添加到Jta文本区域

                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Client().createUI();
    }
}
